package com.tedu.api.list;

import org.junit.Test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;


/**
 * Set集合是Collection集合子接口
 * Set集合接口：无序、无下标、元素不可重复【唯一性】
 * Set集合方法与Collection集合方法【使用一致】
 * add()   remove()   contains()    size()    clear()
 * 使用Iterator迭代器遍历
 * Set集合--接口---无法创建对象---实现类：
 * HashSet：由哈希算法实现，不保证元素顺序，不允许元素重复，可以存null
 * LinkedHashSet：【方法与HashSet一致】，由哈希算法实现，保持元素顺序
 *                      不允许元素重复，可以存null
 * TreeSet【算法：红黑树】:不可以存null，按照元素自然顺序或者指定比较器进行
 *                         元素存储
 */
public class SetAPI {
    @Test
    public void testSet() {
        //Set集合与HashSet方法完全一致
        Set<String> set = new HashSet<>();
        set.add("蒸鹿尾儿");
        set.add("蒸羊羔");
        set.add("烧花鸭");
        set.add("烧子鹅");
        set.add("烧花鸭");
        set.add(null);
        set.add(null);
        System.out.println("Set集合:" + set);
        boolean b = set.contains("烧花鸭");
        System.out.println("判断Set集合是否存在【烧花鸭】元素" + b);//true
        System.out.println("判断Set集合长度:" + set.size());//重复的只算一个
        //Iterator遍历  set  集合  元素
        //1.通过set集合调出 itertor()  获取迭代器实例： Iterator
        Iterator<String> it = set.iterator();
        //2.Iterator遵循：问、 取 、删     烧子鹅
        while (it.hasNext()) {//问：set集合有没有元素---有：true
            String str = it.next();//取set集合元素
            //null 引用类型默认值   不是字符串
            //判段明确的值    必须   ==
            //判断对象       使用   "字符串".equals(str)  实值
            //                         obj.equals(add) 地址值
            //  if ("烧子鹅".equals(str)) {//如果“烧子鹅”等于“烧子鹅”元素
            //    it.remove();
            //    }
            if (str == null) {
                it.remove();
            }
        }
        System.out.println("迭代后的元素:" + set);
    }
}